#! /bin/sh

set -e

# Print our lovely banner image
echo "[0;40;36m[48;2;35;163;116m  [48;2;30m[48;2;67;136;127m  [36m[48;2;92;207;254m  [42m[48;2;35;163;116m  [1m[48;2;91;253;255m  [0m[48;2;104;188;83m  [48;2;30m[48;2;63;132;75m  [0;36m[48;2;38;87;111m  [1m[48;2;91;253;255m  [30m[48;2;44;91;85m  [0;36m[48;2;45;161;133m  [48;2;30m[48;2;69;125;127m  [48;2;52;106;90m  [0;34m[48;2;31;69;124m  [48;2;30m[48;2;62;129;73m  [0;36m[48;2;15;91;163m  [48;2;30m[48;2;65;133;125m  [0;36m[48;2;35;163;116m  [48;2;30m[48;2;76;124;98m  [48;2;52;106;90m  [48;2;69;125;127m  [0;36m[48;2;36;78;92m  [48;2;30m[48;2;52;106;90m  [48;2;69;125;127m  [48;2;62;129;73m  [48;2;52;106;90m  [0;32m[48;2;42;184;93m  [0;36m[48;2;15;91;163m  [48;2;34;157;187m  [1m[48;2;116;251;192m  [0;36m[48;2;36;77;91m  [32m[48;2;56;156;96m  [36m[48;2;34;157;187m  [48;2;36;77;91m  [1m[48;2;116;251;192m  [0;32m[48;2;56;156;96m[0m
[36m[48;2;35;163;116m  [48;2;30m[48;2;67;136;127m  [36m[48;2;92;207;254m  [0;32m[48;2;42;184;93m  [48;2;36m[48;2;91;253;255m  [0m[48;2;104;188;83m  [48;2;30m[48;2;63;132;75m  [0;36m[48;2;38;87;111m  [1m[48;2;91;253;255m  [0;36m[48;2;58;128;152m  [48;2;45;161;133m  [48;2;30m[48;2;69;125;127m  [48;2;52;106;90m  [0;34m[48;2;31;69;124m  [48;2;30m[48;2;62;129;73m  [0;36m[48;2;15;91;163m  [48;2;30m[48;2;65;133;125m  [0;36m[48;2;35;163;116m  [37m[48;2;104;188;83m  [48;2;30m[48;2;52;106;90m  [48;2;69;125;127m  [0;36m[48;2;36;78;92m  [48;2;30m[48;2;52;106;90m  [48;2;69;125;127m  [48;2;62;129;73m  [48;2;52;106;90m  [0;32m[48;2;42;184;93m  [0;36m[48;2;15;91;163m  [48;2;34;157;187m  [1m[48;2;116;251;192m  [0;36m[48;2;36;77;91m  [37m[48;2;104;188;83m  [36m[48;2;34;157;187m  [48;2;36;77;91m  [1m[48;2;116;251;192m  [0;32m[48;2;56;156;96m[0m
[36m[48;2;35;163;116m  [48;2;30m[48;2;67;136;127m  [34m[48;2;172;142;206m  [0;32m[48;2;42;184;93m  [48;2;36m[48;2;91;253;255m  [0m[48;2;104;188;83m  [36m[48;2;41;183;169m  [48;2;38;87;111m  [1m[48;2;91;253;255m  [0;36m[48;2;58;128;152m  [48;2;45;161;133m  [32m[48;2;42;184;93m  [48;2;30m[48;2;52;106;90m  [0;34m[48;2;31;69;124m  [48;2;30m[48;2;62;129;73m  [0;36m[48;2;15;91;163m  [48;2;30m[48;2;65;133;125m  [0;36m[48;2;35;163;116m  [37m[48;2;104;188;83m  [48;2;30m[48;2;52;106;90m  [48;2;69;125;127m  [0;36m[48;2;36;78;92m  [48;2;30m[48;2;52;106;90m  [48;2;69;125;127m  [48;2;62;129;73m  [48;2;52;106;90m  [0;32m[48;2;42;184;93m  [0;36m[48;2;15;91;163m  [48;2;34;157;187m  [1m[48;2;116;251;192m  [0;36m[48;2;36;77;91m  [37m[48;2;104;188;83m  [36m[48;2;34;157;187m  [48;2;36;77;91m  [1m[48;2;116;251;192m  [0;32m[48;2;56;156;96m[0m
[32m[48;2;51;109;102m  [48;2;67;136;127m  [0;36m[48;2;15;91;163m  [32m[48;2;42;184;93m  [48;2;36m[48;2;91;253;255m  [0m[48;2;104;188;83m  [36m[48;2;41;183;169m  [48;2;38;87;111m  [1m[48;2;116;251;192m  [0;36m[48;2;58;128;152m  [48;2;45;161;133m  [32m[48;2;42;184;93m  [48;2;30m[48;2;52;106;90m  [0;34m[48;2;31;69;124m  [48;2;30m[48;2;62;129;73m  [0;36m[48;2;15;91;163m  [48;2;34m[48;2;172;142;206m  [0;36m[48;2;35;163;116m  [37m[48;2;104;188;83m  [48;2;30m[48;2;52;106;90m  [36m[48;2;116;251;192m  [0;36m[48;2;36;78;92m  [48;2;30m[48;2;52;106;90m  [48;2;69;125;127m  [48;2;62;129;73m  [48;2;52;106;90m  [36m[48;2;116;251;192m  [0;36m[48;2;15;91;163m  [48;2;34;157;187m  [1m[48;2;116;251;192m  [0;36m[48;2;15;91;163m  [37m[48;2;104;188;83m  [36m[48;2;34;157;187m  [48;2;36;77;91m  [48;2;34m[48;2;125;93;174m  [0;32m[48;2;56;156;96m[0m
[32m[48;2;51;109;102m  [48;2;67;136;127m  [0;36m[48;2;15;91;163m  [32m[48;2;42;184;93m  [48;2;34m[48;2;125;93;174m  [0m[48;2;104;188;83m  [36m[48;2;41;183;169m  [48;2;38;87;111m  [1m[48;2;116;251;192m  [0;36m[48;2;58;128;152m  [48;2;45;161;133m  [32m[48;2;42;184;93m  [48;2;30m[48;2;52;106;90m  [0;34m[48;2;31;69;124m  [48;2;30m[48;2;62;129;73m  [0;36m[48;2;15;91;163m  [1m[48;2;92;207;254m  [0;36m[48;2;35;163;116m  [37m[48;2;104;188;83m  [48;2;30m[48;2;52;106;90m  [36m[48;2;116;251;192m  [0;36m[48;2;36;78;92m  [48;2;45;161;133m  [48;2;30m[48;2;69;125;127m  [48;2;62;129;73m  [48;2;52;106;90m  [36m[48;2;116;251;192m  [0;36m[48;2;15;91;163m  [48;2;34;157;187m  [1m[48;2;116;251;192m  [0;36m[48;2;15;91;163m  [37m[48;2;104;188;83m  [48;2;34m[48;2;172;142;206m  [0;36m[48;2;36;77;91m  [34m[48;2;31;69;124m  [32m[48;2;56;156;96m[0m
[32m[48;2;51;109;102m  [48;2;67;136;127m  [0;36m[48;2;15;91;163m  [32m[48;2;42;184;93m  [48;2;36m[48;2;116;251;192m  [0m[48;2;104;188;83m  [36m[48;2;41;183;169m  [48;2;38;87;111m  [1m[48;2;116;251;192m  [0;36m[48;2;58;128;152m  [48;2;45;161;133m  [32m[48;2;42;184;93m  [48;2;30m[48;2;52;106;90m  [0;34m[48;2;31;69;124m  [48;2;30m[48;2;62;129;73m  [0;36m[48;2;15;91;163m  [1m[48;2;92;207;254m  [0;36m[48;2;35;163;116m  [37m[48;2;104;188;83m  [48;2;30m[48;2;52;106;90m  [36m[48;2;116;251;192m  [0;36m[48;2;36;78;92m  [48;2;45;161;133m  [48;2;30m[48;2;69;125;127m  [48;2;62;129;73m  [48;2;52;106;90m  [36m[48;2;116;251;192m  [0;36m[48;2;15;91;163m  [48;2;34;157;187m  [1m[48;2;116;251;192m  [0;36m[48;2;15;91;163m  [37m[48;2;104;188;83m  [32m[48;2;56;156;96m  [36m[48;2;36;77;91m  [34m[48;2;31;69;124m  [32m[48;2;56;156;96m[0m
[32m[48;2;51;109;102m  [48;2;67;136;127m  [0;36m[48;2;15;91;163m  [32m[48;2;42;184;93m  [48;2;36m[48;2;116;251;192m  [0m[48;2;104;188;83m  [36m[48;2;41;183;169m  [48;2;38;87;111m  [1m[48;2;116;251;192m  [0;36m[48;2;58;128;152m  [48;2;45;161;133m  [32m[48;2;42;184;93m  [48;2;30m[48;2;52;106;90m  [0;34m[48;2;31;69;124m  [48;2;30m[48;2;62;129;73m  [0;36m[48;2;15;91;163m  [1m[48;2;92;207;254m  [0;36m[48;2;35;163;116m  [37m[48;2;104;188;83m  [48;2;30m[48;2;52;106;90m  [36m[48;2;116;251;192m  [0;36m[48;2;36;78;92m  [48;2;45;161;133m  [48;2;30m[48;2;69;125;127m  [48;2;62;129;73m  [48;2;52;106;90m  [36m[48;2;116;251;192m  [0;36m[48;2;15;91;163m  [48;2;34;157;187m  [1m[48;2;116;251;192m  [0;36m[48;2;15;91;163m  [37m[48;2;104;188;83m  [32m[48;2;56;156;96m  [36m[48;2;36;77;91m  [34m[48;2;31;69;124m  [32m[48;2;56;156;96m[0m
"

echo "❊ Installing the Garden CLI ❊"
echo ""

echo "→ Finding the latest version..."

# Find version to run through GitHub release API
function jsonValue() {
  # see https://gist.github.com/cjus/1047794
  KEY=$1
  num=$2
  awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p
}

GARDEN_VERSION=$(curl -sL https://github.com/garden-io/garden/releases/latest -H "Accept: application/json" | jsonValue tag_name 1)

if [ "$(uname -s)" = "Darwin" ]; then
  OS=macos
else
  OS=linux
fi
PLATFORM=${OS}-amd64

filename="garden-${GARDEN_VERSION}-${PLATFORM}.tar.gz"
url="https://github.com/garden-io/garden/releases/download/${GARDEN_VERSION}/${filename}"

tmp=$(mktemp -d /tmp/garden-install.XXXXXX)
(
  cd "$tmp"

  echo "→ Downloading ${url}..."
  curl -sLO "${url}"

  # TODO: we need to add sha256 files to our releases

  # SHA=$(curl -sL "${url}.sha256")
  # echo ""
  # echo "Download complete!, validating checksum..."
  # checksum=$(openssl dgst -sha256 "${filename}" | awk '{ print $2 }')
  # if [ "$checksum" != "$SHA" ]; then
  #   echo "Checksum validation failed." >&2
  #   exit 1
  # fi
  # echo "Checksum valid."
  # echo ""
)

(
  GARDEN_DIR=${HOME}/.garden
  TARGET_PATH=${GARDEN_DIR}/bin

  echo "→ Extracting to ${TARGET_PATH}..."
  rm -rf "${TARGET_PATH}"
  mkdir -p "${GARDEN_DIR}"
  cd "$tmp"
  tar -xzf "${filename}"
  mv "${PLATFORM}" "${TARGET_PATH}"
)

rm -rf "$tmp"

echo ""
echo "🌺🌻  Garden has been successfully installed 🌷💐"
echo ""
echo "Add the Garden CLI to your path by adding the following to your .bashrc/.zshrc:"
echo ""
echo "  export PATH=\$PATH:\$HOME/.garden/bin"
echo ""
echo "Head over to our Quick Start guide for next steps: https://docs.garden.io/basics/quick-start"
echo ""